import { defineStore } from 'pinia'

// 第一个参数是应用程序中 store 的唯一 id
const useCounterStore = defineStore('counterId', {
  // state 装入变量，是一个函数，返回一个对象
  state: () => {
    return {
      userName: 'D.Y.X',
      num: 0,
      resetStore: {},
    }
  },
  // getters 类似计算属性。推荐里面传递一个形参的写法，不容易出错。
  getters: {
    isAdult: (state) => {
      // 这个 state 指的是上面那个对应的 state
      return state.num >= 18 ? '成年人' : '未成年'
    },
    msg: (state) => {
      // msg这个getter访问了自身的getter（isAdult）
      return state.userName + state.isAdult
    },
    // getters 传参方式
    changeNum: (state) => {
      return (xx) => {
        console.log(xx, state);
      }
    }
  },
  actions: {
    // 这里是针对上面的变量写的方法，其要写成普通函数，因为里面需要通过this去访问state里面的数据（类似 computed）
    changeName(newName) {
      this.userName = newName
    }
  }
})

export default useCounterStore;